package LeetCodeHot100TopInterview;

public class Q075_SortColors {
    //给定一个包含红色、白色和蓝色，n 个元素的数组，原地对它们进行排序
    //使得相同颜色的元素相邻，并按照红色、白色、蓝色顺序排列。
    //此题中，我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。
    //荷兰国旗问题 ==> 一次Partition的过程
    public void sortColors(int[] nums) {
        //小于区边界
        int L = -1;
        //大于区边界
        int R = nums.length;
        int index = 0;
        while (index < R){
            if (nums[index] > 1){
                //index 不变,继续判断交换过来的数
                swap(nums, index, --R);
            }else if (nums[index] < 1){
                swap(nums, index++, ++L);
            }else {
                index++;
            }
        }
        for (int i = 0; i < nums.length; i++) {
            System.out.print(nums[i]);
        }
    }


    public void swap(int[] nums, int x, int y){
        int tmp = nums[x];
        nums[x] = nums[y];
        nums[y] = tmp;
    }

    public static void main(String[] args) {
        Q075_SortColors fun = new Q075_SortColors();
        fun.sortColors(new int[]{2,0,1});
    }
}
